home *** CD-ROM | disk | FTP | other *** search
Text File | 1998-06-01 | 2.9 KB | 197 lines | [TEXT/CWIE] |
- #include "ListLink.h"
- #include "LinkedList.h"
-
- //--------------------------------------------------------------------------------
-
- ListLink::~ListLink()
- {
- Unlink();
- }
-
- //--------------------------------------------------------------------------------
-
- void* ListLink::GetObjectPtr()
- {
- return nil;
- }
-
- //--------------------------------------------------------------------------------
-
- void ListLink::Link(ListLink *prev, ListLink *next, LinkedList* list)
- {
- ListLink* prevNext;
- ListLink* nextPrev;
- ListLink* oldHead;
- ListLink* oldTail;
-
- if (prev != nil)
- {
- prevNext = prev->GetNextLink();
-
- if (list == nil)
- {
- list = prev->GetList();
- }
- }
-
- if (next != nil)
- {
- nextPrev = next->GetPrevLink();
-
- if (list == nil)
- {
- list = next->GetList();
- }
- }
-
- if (list != nil)
- {
- oldHead = list->fFirstLink;
- oldTail = list->fLastLink;
- }
-
- try
- {
- fPrevLink = prev;
- fNextLink = next;
- fList = list;
-
- if (prev != nil)
- {
- prev->SetNextLink(this);
- }
-
- if (next != nil)
- {
- next->SetPrevLink(this);
- }
-
- if (list != nil)
- {
- if (!next) // end of list, or empty
- {
- list->fLastLink = this;
- }
-
- if (!prev) // beginning of list, or empty
- {
- list->fFirstLink = this;
- }
-
- list->LinkInserted(*this);
- }
- }
- catch(...)
- {
- fPrevLink = nil;
- fNextLink = nil;
-
- if (list)
- {
- list->fFirstLink = oldHead;
- list->fLastLink = oldTail;
- }
-
- if (prev)
- {
- prev->SetNextLink(prevNext);
- }
-
- if (next)
- {
- next->SetPrevLink(nextPrev);
- }
-
- throw;
- }
- }
-
- //--------------------------------------------------------------------------------
-
- void ListLink::Unlink(void)
- {
- ListLink* prev = fPrevLink;
- ListLink* next = fNextLink;
-
- if (prev != nil)
- {
- prev->SetNextLink(next);
- }
-
- if (next != nil)
- {
- next->SetPrevLink(prev);
- }
-
- LinkedList* list = fList;
-
- if (list != nil)
- {
- if (list->fFirstLink == this)
- {
- list->fFirstLink = next;
- }
-
- if (list->fLastLink == this)
- {
- list->fLastLink = prev;
- }
-
- list->LinkRemoved(*this);
- }
-
- fPrevLink = nil;
- fNextLink = nil;
- fList = nil;
- }
-
- //--------------------------------------------------------------------------------
-
- bool ListLink::IsBefore(ListLink *before)
- {
- ListLink *link = before;
-
- while (link)
- {
- if (link == this)
- return true;
-
- link = link->GetPrevLink();
- }
-
- return false;
- }
-
- //--------------------------------------------------------------------------------
-
- bool ListLink::IsAfter(ListLink *after)
- {
- ListLink *link = after;
-
- while (link)
- {
- if (link == this)
- return true;
-
- link = link->GetNextLink();
- }
-
- return false;
- }
-
- //--------------------------------------------------------------------------------
-
- ObjectLink::~ObjectLink()
- {
- }
-
- //--------------------------------------------------------------------------------
-
- void* ObjectLink::GetObjectPtr()
- {
- return fObject;
- }
-
- //--------------------------------------------------------------------------------
-
-